iT邦幫忙

1

[Python教學] 日期時間

  • 分享至 

  • xImage
  •  

日期時間

https://ithelp.ithome.com.tw/upload/images/20231114/20072651gsHjpvhp4A.png

時間日期在計算機科學和日常生活中都非常重要。下面是一些時間日期的基本概念和相關信息:

  1. 時間:時間是一個連續的概念,用來衡量事件發生的順序和持續的時間。時間通常以不同的單位來表示,包括秒、分鐘、小時、天、月和年等。
  2. 日期:日期是時間的一個特定點,通常包括年、月和日。日期用於確定事件或行動發生的具體時間。
  3. 時間戳記:時間戳記是一個數字或代碼,表示特定時刻或日期的瞬時值。在計算機科學中,它通常表示為從某一固定時間點(例如1970年1月1日)經過的秒數,這種表示方式稱為「Unix 時間戳記」。
  4. 時區:地球分為多個不同的時區,每個時區都有自己的標準時間。時區用來協調不同地區的時間,以便在全球范圍內統一時間表示。
  5. 日曆系統:不同的文化和地區使用不同的日曆系統,用來計算日期。一些常見的日曆系統包括格里高利曆(西曆)、夏威夷曆、伊斯蘭曆、農曆等。
  6. 日期和時間的表示:在計算機程式中,日期和時間通常以字符串或特殊的日期時間對象來表示。常見的日期和時間表示方式包括 ISO 8601 格式(例如 "2023-11-10" 表示2023年11月10日)、24小時制時間(例如 "15:30:00" 表示下午3點30分)等。
  7. 日期和時間的操作:在計算機程式中,您可以進行各種日期和時間的操作,包括計算日期之間的差值、格式化日期和時間、轉換不同時區的時間等。

這些是時間日期的一些基本概念和相關信息。在實際應用中,根據需要,您可以使用不同的工具和方法來處理日期和時間。

UTC 協調世界時

UTC(協調世界時)是一種全球性的標準時間,用於協調世界各地的時間。它是一個基於原子時鐘的時間標準,通常被視為世界上的參考時間。以下是有關UTC的一些重要信息:

  1. UTC 的含義
    • UTC 是一個不帶時區偏移的時間標準,也稱為GMT(格林尼治平均時間)的後繼者。
    • UTC 的名稱源自法語中的 "Temps Universel Coordonné",意思是"協調世界時"。
    • UTC 不考慮夏令時調整,因此它是穩定的,不會因夏令時變化而改變。
  2. UTC 的用途
    • UTC 通常用於全球性的時間標準,例如計算全球性的通信、科學實驗、航空和航海、計算時間間隔等。
    • 許多計算機系統和網絡通信協議使用UTC作為時間基準,以確保跨時區的一致性。
  3. UTC 的表示
    • UTC 的表示格式通常是以 "HH:MM:SS" 的形式表示,其中HH表示小時、MM表示分鐘、SS表示秒。
    • 日期和時間的結合可以使用 "YYYY-MM-DDTHH:MM:SS" 的格式,例如 "2023-11-10T15:30:00" 表示UTC時間的日期和時間。
  4. UTC 和時區
    • UTC 是一個統一的時間標準,不包括時區信息。它通常被視為時區的參考點。
    • 若要表示特定時區的時間,您需要將UTC時間轉換為該時區,並考慮該時區的時區偏移。
  5. UTC 的獲取
    • 您可以使用計算機或行動設備的系統時鐘獲取當前的UTC時間。
    • 在程式中,您可以使用相關的程式語言和庫來獲取和操作UTC時間。

UTC是全球性的時間標準,確保了全球範圍內的時間一致性。在許多情況下,特別是與跨時區的通信、科學實驗和計算機系統相關的應用中,UTC時間非常重要。

台灣位於UTC+8時區,也稱為台北標準時間(Taipei Standard Time,簡稱TST),或者又被稱為中華民國標準時間(ROC Standard Time),時區代號為「CST」。UTC+8表示台灣的時間比協調世界時(UTC)提前8小時,所以當UTC時間是中午12:00時,台灣的時間是晚上8:00時。台灣不遵循夏令時制度,所以在整年內都保持UTC+8時區。

Datetime 模組

datetime 模組是 Python 中用於處理日期和時間的標準庫模組。它提供了各種功能,允許您創建、操作和格式化日期時間物件。以下是 datetim 模組的主要功能和介紹:

  1. 日期和時間物件datetime 模組定義了幾個重要的類別,包括 datetime.datedatetime.timedatetime.datetime。這些類別允許您分別表示日期、時間和日期時間。
  2. 創建日期時間物件:您可以使用 datetime 模組來創建日期時間物件,例如:
from datetime import datetime
# 創建一個表示當前日期時間的物件
now = datetime.now()
# datetime.datetime(2023, 11, 14, 9, 57, 23, 172582)
  1. 日期和時間格式化datetime 模組允許您將日期時間物件格式化為字串,或將字串解析為日期時間物件。您可以使用
    strftime() 方法將日期時間格式化為字串。
    strptime() 方法將字串解析為日期時間物件。
from datetime import datetime

# 格式化日期時間為字串
now = datetime.now()
formatted_date = now.strftime("%Y-%m-%d %H:%M:%S")
# 2023-11-14 09:57:55

# 解析字串為日期時間物件
date_string = "2023-11-10 15:30:00"
parsed_date = datetime.strptime(date_string, "%Y-%m-%d %H:%M:%S")
# datetime.datetime(2023, 11, 10, 15, 30)
  1. 日期時間運算:您可以執行日期時間的各種數學運算,如加法和減法,以計算日期時間的差值或在日期時間上進行操作。
from datetime import datetime, timedelta

# 計算未來某一天的日期
now = datetime.now()
# datetime.datetime(2023, 11, 14, 9, 58, 42, 120398)

future_date = now + timedelta(days=7)
# datetime.datetime(2023, 11, 21, 9, 58, 42, 120398)
  1. 時區支援datetime 模組允許您處理時區相關的日期時間操作。
from datetime import datetime

# 獲取當前UTC時間
utc_now = datetime.utcnow()
datetime.datetime(2023, 11, 14, 1, 59, 18, 337317)

# 印出UTC時間
print("當前UTC時間:", utc_now)
# 當前UTC時間: 2023-11-14 01:59:18.337317
  1. 日期時間比較:您可以比較日期時間物件,以判斷哪個日期時間更早或更晚。
from datetime import datetime

# 比較日期時間物件
date1 = datetime(2023, 11, 10)
date2 = datetime(2023, 11, 15)

if date1 < date2:
    print("date1 在 date2 之前")
  1. 獲取當前日期時間:您可以使用 datetime.now() 方法獲取當前的日期時間物件,以進行各種日期時間操作。
from datetime import datetime

# 獲取當前日期時間
now = datetime.now()

總之,datetime 模組為 Python 提供了強大的日期時間處理能力,可以方便地進行日期時間的創建、格式化、運算和比較等操作。這些功能使它在許多應用中都非常有用,包括時間戳記記錄、日曆應用程式、數據分析等。

常用方法

方法 描述 範例
datetime.now() 返回當前的日期和時間。 now = datetime.now()
datetime.today() 返回當前日期和時間,等效於datetime.now()。 today = datetime.today()
datetime.strptime(date_string, format) 解析字串為日期時間物件,並根據指定的格式進行解析。 parsed_date = datetime.strptime(date_string, "%Y-%m-%d %H:%M:%S")
datetime.strftime(format) 格式化日期時間物件為字串,根據指定的格式進行格式化。 formatted_date = now.strftime("%Y-%m-%d %H:%M:%S")
datetime.date() 返回日期部分。 date_part = now.date()
datetime.time() 返回時間部分。 time_part = now.time()
datetime.year 返回年份。 year = now.year
datetime.month 返回月份。 month = now.month
datetime.day 返回日期。 day = now.day
datetime.hour 返回小時。 hour = now.hour
datetime.minute 返回分鐘。 minute = now.minute
datetime.second 返回秒數。 second = now.second
datetime.replace(year, month, day, hour, minute, second) 創建一個新的日期時間物件,並用指定的值替換相應的部分。 new_date = now.replace(year=2023, month=12)
datetime.timedelta(days, seconds, microseconds, milliseconds, minutes, hours, weeks) 創建一個時間差物件,表示指定的時間間隔。 delta = timedelta(days=3, hours=2)
datetime + timedelta 將時間差添加到日期時間物件,生成新的日期時間物件。 new_date = datetime.now() + timedelta(days=2)
datetime - timedelta 從日期時間物件減去時間差,生成新的日期時間物件。 new_date = datetime.now() - timedelta(days=2)

timedelta 時間差異

timedelta(時間差異)是 Python 中用於表示時間間隔的類別。它允許您執行日期和時間的數學運算,例如加法、減法和比較,用於處理時間間隔非常方便。以下是有關 timedelta 的重要資訊:

  1. timedelta 物件
    • timedeltadatetime 模組中的一個類別,用於表示時間間隔。
    • 您可以使用 timedelta 物件表示一段時間的長度,例如幾天、幾小時、幾分鐘或幾秒。
  2. 創建 timedelta 物件
    • 您可以使用 timedelta 建構函式來創建 timedelta 物件,並指定要表示的時間間隔的各個組成部分,如天、小時、分鐘、秒等。
from datetime import timedelta

# 創建一個表示3天的時間間隔
delta = timedelta(days=3)
# datetime.timedelta(days=3)

# 創建一個表示2小時30分鐘的時間間隔
delta2 = timedelta(hours=2, minutes=30)
# datetime.timedelta(seconds=9000)

  1. 時間間隔運算
    • 您可以對 timedelta 物件執行各種數學運算,如加法和減法,以計算時間間隔的和或差。
from datetime import timedelta

# 創建兩個時間間隔物件
delta1 = timedelta(days=3)
delta2 = timedelta(days=2)

# 計算時間間隔的和
result = delta1 + delta2
# datetime.timedelta(days=5)

# 計算時間間隔的差
result2 = delta1 - delta2
# datetime.timedelta(days=1)
  1. 比較時間間隔
    • 您也可以比較 timedelta 物件,以判斷哪個時間間隔較長或較短。
pythonCopy code
from datetime import timedelta

delta1 = timedelta(days=3)
delta2 = timedelta(days=2)

if delta1 > delta2:
    print("delta1 較長")
  1. 格式化輸出
    • 您可以將 timedelta 物件格式化為字串,以便以易讀的方式顯示時間間隔。
pythonCopy code
from datetime import timedelta

delta = timedelta(days=3, hours=2, minutes=30)
formatted = str(delta)
# '3 days, 2:30:00

timedelta 物件非常實用,可用於各種需要處理時間間隔的情況,例如計算日期之間的差異、計算任務的執行時間等。它是 Python 中處理時間間隔的標準工具。

參數說明

參數 說明 範例
days 天數間隔 timedelta(days=3)
seconds 秒數間隔 timedelta(seconds=3600)
microseconds 微秒數間隔 timedelta(microseconds=500000)
milliseconds 毫秒數間隔 timedelta(milliseconds=2000)
minutes 分鐘數間隔 timedelta(minutes=45)
hours 小時數間隔 timedelta(hours=2)
weeks 週數間隔 timedelta(weeks=2)

calendar 日曆

calendar 模組是 Python 中的標準庫之一,用於處理日期和時間相關的操作。它提供了各種與日曆和日期計算相關的函數和類別,允許您執行各種日期和時間操作。以下是有關 calendar 模組的一些介紹:

  1. 匯入 calendar 模組
    • 要使用 calendar 模組,首先需要匯入它:
import calendar
  1. 獲取日曆信息
    • calendar 模組允許您獲取各種有關日曆的信息,如某年某月的月曆、某年的年曆等。
    • 例如,您可以使用 calendar.month() 函數來獲取指定年份和月份的月曆:
import calendar

year = 2023
month = 11
cal = calendar.month(year, month)
print(cal)

![https://ithelp.ithome.com.tw/upload/images/20231114/20072651PswFhi4kl2.png](https://ithelp.ithome.com.tw/upload/images/20231114/20072651PswFhi4kl2.png)
這將輸出指定年份和月份的月曆。
  1. 日期範圍和工具函數
    • calendar 模組還提供了用於處理日期範圍和日期計算的工具函數,如 calendar.monthrange()calendar.weekday() 等。
    • 例如,calendar.monthrange() 函數用於獲取指定年份和月份的第一天是星期幾以及該月的天數:
import calendar

year = 2023
month = 11
first_weekday, num_days = calendar.monthrange(year, month)
# first_weekday=2, num_days=30

這將返回第一天是星期幾(0 表示星期一,6 表示星期日)以及該月的天數。

  1. 常數
    • calendar 模組還定義了一些與日期和星期相關的常數,如星期一到星期日的名稱和月份的名稱等。
    • 例如,您可以使用 calendar.SUNDAYcalendar.MONDAY 等常數來表示星期幾。

calendar 模組在處理日期和時間方面是非常有用的工具,特別是在生成日曆、計算日期範圍和執行日期計算等任務時。通過結合使用 calendar 模組的函數和常數,您可以輕鬆執行各種日期和時間操作。

應用範例

以下是一個有趣的日期應用小遊戲,稱為「生日星期猜猜樂」。玩家需要猜測特定日期的星期,並檢查答案的正確性。

from datetime import datetime
import random

# 產生隨機的日期
def generate_random_date():
    year = random.randint(1950, 2023)
    month = random.randint(1, 12)
    day = random.randint(1, 28)  # 簡化起見,假設最大為28日
    return datetime(year, month, day)

# 獲取日期的星期
def get_weekday(date):
    weekdays = ["星期一", "星期二", "星期三", "星期四", "星期五", "星期六", "星期日"]
    return weekdays[date.weekday()]

# 主要遊戲循環
def birthday_game():
    print("歡迎來到生日星期猜猜樂!")
    correct_answers = 0
    total_questions = 5  # 您可以根據需要更改問題數量

    for _ in range(total_questions):
        random_date = generate_random_date()
        print(f"請猜測 {random_date.year}年{random_date.month}月{random_date.day}日是星期幾:")
        user_guess = input("輸入星期幾(例:星期一):")

        correct_weekday = get_weekday(random_date)

        if user_guess == correct_weekday:
            print("正確答案!\n")
            correct_answers += 1
        else:
            print(f"錯誤答案。正確答案是 {correct_weekday}。\n")

    print(f"您在 {total_questions} 個問題中答對了 {correct_answers} 個問題!")

if __name__ == "__main__":
    birthday_game()

遊戲會隨機生成日期,然後要求玩家猜測該日期是星期幾。玩家將在幾個問題中回答正確的次數,最終會得到一個分數。您可以根據需要自定義遊戲的難度和問題數量。這個小遊戲可以讓您玩得開心,同時也提供了練習猜測星期的機會。

https://ithelp.ithome.com.tw/upload/images/20231114/20072651iRiUKtIsVl.png

結論

日期時間在平常資料處理很常使用到,內建提供的 Datetime、calendar 模組可以處理大部分的問題,在撰寫系統時,有時候時區也是很大的一個雷,尤其是你的系統是多國在使用,就需要更特別注意。

系列文章

分享所學貢獻社會
[Python教學]開發工具介紹
[開發工具] Google Colab 介紹
[Python教學] 資料型態
[Python教學] if判斷式
[Python教學] List 清單 和 Tuple元組
[Python教學] for 和 while 迴圈
[Python教學] Dictionary 字典 和 Set 集合
[Python教學] Function函示
[Python教學] Class 類別
[Python教學] 例外處理
[Python教學] 檔案存取
[Python教學] 實作密碼產生器
[Python教學] 日期時間

最後最後有一件小小的請求,請大家幫我填寫一下問卷,
讓我們知道你想上怎麼樣課程,感激不盡。
問卷這邊

Facebook 粉絲頁 - TechMasters 工程師養成記

程式教育 - 工程師養成記

同步分享到部落格


圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言